package org.ccay.core.util;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * 集合工具
 */
public final class CollectionUtil {
	private CollectionUtil(){
	}
	
	/**
	 * 数组为空或者为空心的
	 * @param array
	 * @return
	 */
	public static boolean isNullOrEmpty(Object[] array){
		if(array == null || array.length ==0){
			return true;
		}
		return false;
	}
	/** hufeng 00214522 添加map为空的判断
	 * 集合为空或者空心的
	 * @param collection
	 * @return
	 */
	public static boolean isNullOrEmpty(Map<?,?> map){
		if(map == null || map.isEmpty()){
			return true;
		}
		
		return false;
	}
	/**
	 * 集合为空或者空心的
	 * @param collection
	 * @return
	 */
	public static boolean isNullOrEmpty(Collection<? extends Object> collection){
		if(collection == null || collection.isEmpty()){
			return true;
		}
		
		return false;
	}

	/** 
	 * 转换MAP，保留Map的第一个元素
	 * @param parameters
	 * @return
	 */
	public static Map<String, Serializable> convertMap(Map<String, String[]> parameters) {
		Map<String, Serializable> context = new HashMap<String,Serializable>();
		/**
		 * 将第一个元素放入Context，其他元素忽略
		 */
		for(Map.Entry<String, String[]> entry : parameters.entrySet()){
			context.put(entry.getKey(),entry.getValue()[0]);
		}
		
		return context;
	}	 
	
	/** 
	 * 转换MAP，保留Map的第一个元素
	 * @param parameters
	 * @return
	 */
	public static Map<String, String> convert(Map<String, String[]> parameters) {
		Map<String, String> context = new HashMap<String,String>();
		/**
		 * 将第一个元素放入Context，其他元素忽略
		 */
		for(Map.Entry<String, String[]> entry : parameters.entrySet()){
			context.put(entry.getKey(),entry.getValue()[0]);
		}
		
		return context;
	}
	
	/** 
	 * 转换lsit，将map转换为list对象
	 * @param parameters
	 * @return
	 */
	public static List<Object> convertList(Map<String, Object> parameters) {
		List<Object>  contextList = new ArrayList<Object>();
		for(Map.Entry<String, Object> entry : parameters.entrySet()){
			contextList.add(entry.getValue());
		}
		return contextList;
	}	
	
	/**
	 * 取两个集合的交集
	 * @param set1 第一个集合
	 * @param set2 第二个集合
	 * @return 两个集合的交集
	 */
	public static <T> Set<T> intersect(Set<T> set1, Set<T> set2){
		if (set1.size() > set2.size()) {
			Set<T> tmp = set1;
            set1 = set2;
            set2 = tmp;
	    }
		Set<T> intersection = new HashSet<T>();
		for (T e : set1) {
			if (set2.contains(e)) {
				intersection.add(e);
			}
		}
		return intersection;
	}
}